import java.util.*;

/**
 * Dies ist die Klasse Lobby. Hier werden die Nutzer gespeichert, die sich in der Lobby befinden.
 * Geschrieben wurden sie von Tobi Abram ab dem 12.01.2015 fuer das Projektspiel CAH.
 */
public class Lobby {
    private ArrayList<Nutzer> meineNutzer;
    private int groesse;

    private CAH game;
    private boolean spielLaueft;
    private int status; //1=alleHabenIhreKarten, 2=alleHabenAntwortenGegeben, 3=wahlWurdeGetroffen

    public Lobby(int pGroesse) {
        groesse = pGroesse;
        meineNutzer = new ArrayList<Nutzer>();
        spielLaueft = false;
        status = 0;
    }

    //METHODEN FUER DEN SPIELVERLAUF

    public void starteSpiel(int anzahlSpieler, ArrayList<Nutzer> dieSpieler) {
        game = new CAH(anzahlSpieler);
        //die Spieler den Nutzern zuordnen
        for (int i=0; i<dieSpieler.size(); i++) {
            Player neuerSpieler = new Player(dieSpieler.get(i).getBenutzername(), dieSpieler.get(i));
            game.newPlayer(neuerSpieler); //im Spiel einfuegen
        }
        game.spielBeginn();
        status = 1;
    }

    public CAH getSpiel() {
        return game;
    }

    public ArrayList<String> getAntwortenAll() {
        ArrayList<String> a = new ArrayList<String>();
        for (int i=0; i<game.p.size(); i++) {
            //die Jury wird rausgenommen
            if (game.p.get(i).getJury() == false) {
                if (game.p.get(i).antwort2.equals("")) {
                    a.add(game.p.get(i).name + ": " + game.p.get(i).antwort1);
                } else a.add(game.p.get(i).name + ": " + game.p.get(i).antwort1 + ", "+game.p.get(i).antwort2);
            }
        }
        return a;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    //ANDERE METHODEN

    public boolean getSpielLaeuft() {
        return spielLaueft;
    }

    public void setSpielLaeuftTrue() {
        spielLaueft = true;
    }

    public void setSpielLaueftFalse() {
        spielLaueft = false;
    }

    public Nutzer neuenAdminZuordnen() {
        if (meineNutzer.isEmpty()) {
            return null;
        } else return meineNutzer.get(0);
    }

    public void nutzerEinfuegen(Nutzer pNutzer) {
        meineNutzer.add(pNutzer);
    }

    public int getEingefuegteNutzer() {
        return meineNutzer.size();
    }

    public ArrayList<Nutzer> getNutzer() {
        return meineNutzer;
    }

    public int getGroesse() {
        return groesse;
    }

    public void nutzerManuellEinfuegen(Nutzer pNutzer) {
        groesse++;
        meineNutzer.add(pNutzer);
    }

    public boolean nutzerEntfernen(Nutzer pNutzer) {
        if (istNutzerEnthalten(pNutzer) == true) {
            meineNutzer.remove(pNutzer);
            return true;
        } else return false;
    }

    public boolean istNutzerEnthalten(Nutzer pNutzer) {
        for (int i=0; i<meineNutzer.size(); i++) {
            if (pNutzer.equals(meineNutzer.get(i))) {
                return true;
            }
        }
        return false;
    }
    
    public Nutzer getNutzerFromAntwort(String antwort) {
        for (int i=0; i<getSpiel().p.size(); i++) {
            if (antwort.startsWith(getSpiel().p.get(i).antwort1)) {
                return getSpiel().p.get(i).getNutzer();
            }
        }
        return null;
    }
}